package cn.kgc.itrip.service.impl;

import cn.kgc.itrip.beans.dto.Dto;
import cn.kgc.itrip.beans.pojo.ItripUser;
import cn.kgc.itrip.mapper.ItripUserMapper;
import cn.kgc.itrip.service.UserService;
import cn.kgc.itrip.util.*;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;

/**
 * Created by Administrator on 2018/11/21.
 */
@Service
public class UserServiceImpl implements UserService {

    @Resource
    private ItripUserMapper itripUserMapper;
    @Resource
    private StringRedisTemplate stringRedisTemplate;//string string
    @Resource
    private RedisTemplate redisTemplate;
    @Resource
    private MessageUtil messageUtil;
    @Resource
    private RedisUtil redisUtil;
    @Resource
    private SimpleMailMessage mailMessage;
    @Resource
    private MailSender mailSender;

    @Override
    public Dto<ItripUser> login(String username, String password) {
        return null;
    }









    //判断是否存在
    @Override
    public Dto emailRegister(ItripUser user) {
        user.setCreatedBy(System.currentTimeMillis());
        user.setActivated(0);
        //1 调用持久层进行添加操作
        System.out.println("数据库添加用户信息");
        // 2 生成一个验证码 保存到redis
        String code = ValiditorCodeUtil.getCode(18);
        redisUtil.setValueExpire(user.getUserCode(),code,24*60*60);
        System.out.println(code);
        //3  发送邮件给客户
        mailMessage.setText("欢迎注册,您的验证码是"+code);
        mailMessage.setSentDate(new Date());
        mailMessage.setTo(user.getUserCode());
        System.out.println("11111111");
        mailSender.send(mailMessage);
        System.out.println("2222222222");
        //4 响应用户 结果
        Dto dto=new Dto();
        dto.setCore("555555");
        dto.setMessage("注册成功,等待激活");
        dto.setResult("true");
        return dto;
    }
//    //判断是否存在
//    public Dto emailRegedit(Itrip_User user){
//            user.setCreationdate(new Timestamp(System.currentTimeMillis()));
//            user.setActivated(0);
//        //1 调用持久层进行添加操作
//        System.out.println("数据库添加用户信息");
//        // 2 生成一个验证码 保存到redis
//        String code= ValiditorCodeUtil.getCode(18);
//        redisUtil.setValueExpire(user.getUsercode(),code,24*60*60);
//        //3  发送邮件给客户
//        mailMessage.setText("欢迎注册,您的验证码是"+code);
//        mailMessage.setSentDate(new Date());
//        mailMessage.setTo(user.getUsercode());
//        mailSender.send(mailMessage);
//    //4 响应用户 结果
//        Dto dto=new Dto();
//        dto.setCode("555555");
//        dto.setMessage("注册成功,等待激活");
//        dto.setResult("true");
//
//        return dto;
//    }
//
//    @Override
//    public Dto validator(String name, String code) {
//        //1 从redis中根据name取中, 和传赤的进行对比44ad5f630e864fc7ae6083f90a0bdf25
//        if(null==redisUtil.getValue(name)){
//            return DtoUtils.getErrorDto("这个东西 不存在","x00001");
//        }
//        if (code.equalsIgnoreCase(redisUtil.getValue(name))) {
//            System.out.println("数据库修改用户状态为激活");
//            redisUtil.del(name);
//            return DtoUtils.getSuccesDto();
//        }
//        return DtoUtils.getErrorDto("激活失败,原因不一样","cw2001");
//        //2 相同就进行数据库修改
//    }
    @Override
    public Dto validator(String name, String code) {
        //1 从redis中根据name取中, 和传赤的进行对比44ad5f630e864fc7ae6083f90a0bdf25
        if(null==redisUtil.getValue(name)){
            return DtoUtils.getErrorDto("这个东西 不存在","x00001");
        }
        if(code.equalsIgnoreCase(redisUtil.getValue(name))){
            System.out.println("数据库修改用户状态为激活");
            redisUtil.del(name);
            return DtoUtils.getSuccesDto();
        }
        return DtoUtils.getErrorDto("激活失败,原因不一样","cw2001");
    }
//
//    @Override
//    public Dto phoneRegedit(Itrip_User user) {
//     String isExists= redisUtil.getValue(user.getUsercode());
//       if(null!=isExists){
//            return DtoUtils.getErrorDto("不要lau俺来","55555");
//       }
//        user.setCreationdate(new Timestamp(System.currentTimeMillis()));
//        user.setActivated(0);
//        //1 调用持久层进行添加操作
//        System.out.println("数据库添加用户信息");
//        // 2 生成一个验证码 保存到redis
//        return resetPhoneCode(user.getUsercode());
//    }
        @Override
        public Dto phoneRegister(ItripUser user) {
        String isExists = redisUtil.getValue(user.getUserCode());
        if(null!=isExists){
            return DtoUtils.getErrorDto("不要乱来","55555");
        }
        user.setCreatedBy(System.currentTimeMillis());
        user.setActivated(0);
//            1 调用持久层进行添加操作
        System.out.println("数据库添加用户信息");
//         2 生成一个验证码 保存到redis
        return resetPhoneCoded(user.getUserCode());
        }

//
//    public Dto resetPhoneCode(String name){
//        // 2 生成一个验证码 保存到redis
//        String code= ValiditorCodeUtil.getPhoneCode();
//        redisUtil.setValueExpire(name,code, SysConstants.EXPRIE_TIME*60);
//        //3  发送短信给客户
//        messageUtil.sendTemplateSMS(name,"1",new String[]{code,""+SysConstants.EXPRIE_TIME});
//        //4 响应用户 结果
//        return DtoUtils.getSuccesDto();
//    }
        @Override
        public Dto resetPhoneCoded(String name) {
            // 2 生成一个验证码 保存到redis
            String code = ValiditorCodeUtil.getPhoneCode();
            redisUtil.setValueExpire(name,code,SysConstants.EXPRIE_TIME*60);
            //3  发送短信给客户
            messageUtil.sendTemplateSMS(name,"1",new String[]{code,""+SysConstants.EXPRIE_TIME});
            //4 响应用户 结果
            return DtoUtils.getSuccesDto();
        }
//
//
//    @Override
//    public Dto<Itrip_User> login(String username, String password) {
//        Itrip_User user=new Itrip_User();
//        user.setUsercode(username);
//        user.setUserpassword(password);
//     ;
//        user=   itripUserMapper.selectByLogin(user);
//        if(user != null){
//            redisUtil.setValueExpire(user.getId()+"_"+user.getUsercode(),user.getUsername(),600L);
////            stringRedisTemplate.opsForValue().set(user.getUsercode(),user.getUsername(),1800,TimeUnit.SECONDS);
////            stringRedisTemplate.opsForValue().set("test","123456",1, TimeUnit.MINUTES);//向redis里存入数据和设置缓存时间
////            System.out.println(stringRedisTemplate.opsForValue().get("test"));//根据key获取缓存中的val
////
////            stringRedisTemplate.boundValueOps("test").increment(-1);//val做-1操作
////            stringRedisTemplate.boundValueOps("test").increment(1);//val +1
////
////            stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合
////            stringRedisTemplate.opsForSet().isMember("red_123", "1");//根据key查看集合中是否存在指定数据
////            stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合
////
////            stringRedisTemplate.getExpire("test");//根据key获取过期时间
////            stringRedisTemplate.getExpire("test",TimeUnit.SECONDS);//根据key获取过期时间并换算成指定单位
////            stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过期时间
////
////            stringRedisTemplate.delete("test");//根据key删除缓存
////            stringRedisTemplate.hasKey("546545");//检查key是否存在，返回boolean值
////
//
//            redisTemplate.setKeySerializer(new StringRedisSerializer());
//            redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Itrip_User>(Itrip_User.class));
//           redisTemplate.opsForValue().set(user.getId()+"",user);
//        }
//
//        Dto dto=new Dto();
//        dto.setMessage("登录成功");
//        dto.setCode("00000");
//        dto.setData(user );
//        return dto;
//    }
}
